package com.kuang.feture;


import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

//有返回值的 supplyAsync 异步回调
// ajax,成功和失败的回调
// 返回的是错误信息
public class Test2 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        System.out.println("========start========");
        // 异步任务
        CompletableFuture<Integer> integerCompletableFuture = CompletableFuture.supplyAsync(() -> {  //Supplier 供给型接口，前面四大函数式接口讲过
            int i = 10/0;
            System.out.println(Thread.currentThread().getName() + "supplyAsync=>Integer");
            return 1024;
        });

        // 完成异步任务后，打印输出成功回到、或者失败回调
        System.out.println(integerCompletableFuture.whenComplete((t, u) -> {  //BiConsumer<T, U> 增强版消费型接口
            // success
            System.out.println("t=>" + t);  // t:正常返回结果
            System.out.println("u=>" + u);  // u:错误信息:没有就输出null
        }).exceptionally((e) -> {
            // error
            System.out.println(e.getMessage()); // 输出异常信息
            return 233;  // 可以获取到错误的返回结果
        }).get());
        System.out.println("========end========");


        /*
            异步执行内容中没有错误时：
            ========start========
            ForkJoinPool.commonPool-worker-1supplyAsync=>Integer
            t=>1024
            u=>null
            1024
            ========end========

            异步执行内容中有错误时：
            ========start========
            t=>null
            u=>java.util.concurrent.CompletionException: java.lang.ArithmeticException: / by zero
            java.lang.ArithmeticException: / by zero
            233
            ========end========
         */

    }
}
